# from __future__ import annotations

"""
示例：通过 FeishuClient 拉取子文件列表，使用 .env 文件配置环境变量。
"""

import asyncio
import json
from config import load_settings
from feishu_client import FeishuClient



  # 1. 定义格式化输出方法
def format_node_list(data: dict) -> list:
    """
    格式化输出子文件信息

    :param data: 接口返回的完整数据字典
    :return: 格式化后的子文件信息列表
    """
    # 1. 获取 node_list 和 nodes 字典
    node_list = data.get("data", {}).get("node_list") or []
    nodes_dict = data.get("data", {}).get("entities", {}).get("nodes") or {}

    result = []
    # 2. 遍历 node_list，提取每个子文件的详细信息
    for node_name in node_list:
        node_info = nodes_dict.get(node_name, {})
        # 仅提取关心的字段
        formatted_node = {
            "name": node_name,
            "token": node_info.get("token"),
            "name_in_node": node_info.get("name"),
            "url": node_info.get("url"),
            # 可根据需要添加更多字段
        }
        result.append(formatted_node)
    # 3. 返回格式化后的结果
    return result

async def main() -> None:
    # 1. 读取环境变量
    settings = load_settings()

    # 2. 校验必要参数
    if not settings.parent_token or not settings.space_children_base_url or not settings.cookie:
        print("请在 .env 文件中配置 FEISHU_PARENT_TOKEN、FEISHU_SPACE_CHILDREN_BASE_URL 和 FEISHU_COOKIE")
        return

    # 3. 请求头与客户端实例
    client = FeishuClient(
        base_url=settings.space_children_base_url,
        default_headers={
            "Cookie": settings.cookie,
            "User-Agent": "Mozilla/5.0",
        },
    )

    # 4. 查询参数（与站内接口一致）
    params = {
        "token": settings.parent_token,
        "length": min(settings.limit, 100),
        "thumbnail_width": 1028,
        "thumbnail_height": 1028,
        "thumbnail_policy": 4,
        "asc": 1,
        "rank": 5,
        "interflow_filter": "CLIENT_VARS",
        "obj_type": [0, 2, 22, 44, 3, 30, 8, 11, 12, 84],
    }

    # 5. 发起异步 GET 请求（仅一页示例）
    response = await client.async_get(params=params)

    if response.status_code == 200:
        data = response.json()
        # print(data)
        items = data.get("data", {}).get("node_list") or []
        print(f"子文件数量（本页）：{len(items)}")
        if items:
            print(f"第一个子文件信息：{items[0]}")
  
    # 调用格式化方法并输出
    formatted_result = format_node_list(data)

    print("格式化后的子文件信息：")
    # 1. 构建输出文件名，格式为：token.名称+.json
    # output_filename = f"{settings.output_file}/{settings.parent_token}.json"
    output_filename = f"{settings.output_file}/{settings.parent_token}.csv"
    # 2. 以追加模式写入格式化后的结果到输出文件

    with open(output_filename, "a", encoding="utf-8") as f:
        # 1. 逐条写入，每个 item 占一行，便于追加和后续处理
        for item in formatted_result:
            # f.write(json.dumps(item, ensure_ascii=False, indent=2))
            f.write(f"{item['name_in_node']},{item['url']}")
            f.write("\n")
    print(f"格式化后的子文件信息已追加写入：{output_filename}")

if __name__ == "__main__":
    asyncio.run(main())
